package TemplateMethod;

public class TemplateMethodPattern {
    public static void main(String[] args) {
        AbstractClass abstractClass = new ConcreteClass();
        abstractClass.TemplateMethod();
    }
}
//抽象类
abstract class AbstractClass{
    public void TemplateMethod()//模板方法
    {
        SpecificMethod();
        abstractMethod1();
        abstractMethod2();
    }
    public void SpecificMethod()//具体方法
    {
        System.out.println("抽象类中的具体方法被调用");
    }
    //两个抽象方法
    public abstract void abstractMethod1();
    public abstract void abstractMethod2();
}
//具体的子类
class ConcreteClass extends AbstractClass{

    @Override
    public void abstractMethod1() {
        System.out.println("具体子类实现抽象方法1");
    }

    @Override
    public void abstractMethod2() {
        System.out.println("具体子类实现抽象方法2");
    }
}